// 26. 删除有序数组中的重复项
// https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
// 滑窗算法

/**
 * 思路
 * 该题用类似与滑窗的思路，双指针left=0和right=0,还有一个替换replace的位置，初始为-1
 *
 * right用于依次遍历完数组
 * left用于记录不重复的数字数量
 *
 * 先对right++
 * if nums[left] == nums[right] replace = right || ++
 * else left+1 if(replace>-1) nums[left] = nums[right]
 */

/**
示例 1：

输入：nums = [1,1,2]
输出：2, nums = [1,2,_]
解释：函数应该返回新的长度 2 ，并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
示例 2：

输入：nums = [0,0,1,1,1,2,2,3,3,4]
输出：5, nums = [0,1,2,3,4]
解释：函数应该返回新的长度 5 ， 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
 */

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function (nums) {
    let left = 0;
    let replace_index = -1;
    for (let right = 1; right < nums.length; right++) {
        if (nums[left] === nums[right]) {
            if (replace_index == -1) replace_index = right;
        } else {
            left++;
            if (replace_index !== -1) {
                nums[left] = nums[right];
            }
        }
    }

    console.log(`new nums count:${left + 1}, arr: ${JSON.stringify(nums)}`);
    return left + 1;
};

removeDuplicates([1, 1, 2]);
removeDuplicates([0, 0, 1, 1, 1, 2, 2, 3, 3, 4]);
